<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>
        // 原型对象  prototype
        //   每一个函数都有一个属性叫做prototype



        // 原型  __proto__
        //   每一个对象都有一个属性叫做 __proto__  它指向构造函数的prototype

        const arr = [1, 2, 3];
        console.log(arr)
        console.log(arr.__proto__)



        function Dog(name, age) {
            this.name = name;
            this.age = age;
        }

        Dog.prototype.type = '狗子';
        Dog.prototype.say = function () {
            console.log('wang');
        }


        Dog.fn = function () {

        }


        const d = new Dog('哈士奇', 2);
        console.log(d.type);
        d.say();

        // 实例化对象  d为什么能访问 type和say ???

        //    constructor   Dog
        //    __proto__     Dog.prototype

        //    实例化对象的原型指向了这个原型对象 



        console.log(d.__proto__ === Dog.prototype);

        // d 只能访问say   但是不能访问 fn


    </script>

</body>

</html>